@echo off
title 端口占用进程终止工具
color 0A
setlocal enabledelayedexpansion

:menu
cls
echo ==========================================
echo           端口占用进程终止工具（支持Y/N大小写）
echo ==========================================
echo.

set /p port=请输入要检查的端口号: 
echo.

echo 正在查找端口 %port% 的占用情况...
echo.

:: 查找端口对应的PID
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%port%" ^| findstr "LISTENING"') do (
    set pid=%%a
    goto :found
)

echo 未找到端口 %port% 的监听进程!
goto :end

:found
echo 找到端口 %port% 的监听进程，PID为: %pid%
echo.

:: 获取进程名称
for /f "tokens=2 delims=," %%b in ('tasklist /fi "pid eq %pid%" ^| findstr "%pid%"') do (
    set process=%%b
)

echo 进程名称: %process%
echo.
echo ==========================================
echo 警告: 终止进程可能导致数据丢失或程序异常!
echo ==========================================
echo.

:: 读取输入并转换为大写（忽略大小写）
set "input="
set /p "input=是否强制终止该进程 (Y/N)? "
set "input=!input:~0,1!" & set "input=!input:y=Y!" & set "input=!input:n=N!"

if /i "!input!" neq "Y" if /i "!input!" neq "N" (
    echo 输入无效，请重新输入!
    timeout /t 2 >nul
    goto :found
)

if /i "!input!"=="N" (
    echo 已取消操作。
    goto :end
)

echo 正在终止进程 %pid% (%process%)...
taskkill /F /PID %pid%
if errorlevel 1 (
    echo 终止失败! 可能需要管理员权限。
) else (
    echo 进程已成功终止!
)

:end
echo.
set "input="
set /p "input=是否继续检查其他端口 (Y/N)? "
set "input=!input:~0,1!" & set "input=!input:y=Y!" & set "input=!input:n=N!"

if /i "!input!" neq "Y" if /i "!input!" neq "N" (
    echo 输入无效，请重新输入!
    timeout /t 2 >nul
    goto :end
)

if /i "!input!"=="Y" goto :menu
echo 程序已退出。

:exit
endlocal